package com.sugon.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 模具档案信息实体
 * 表名 MODULE_ARCHIVES
 *
 * @author sugon
 * @date 2019-08-06 16:33:04
 * @since 2021-03-30 10:11
 * 新增镶块厂家、模具厂家、购买时间、量产时间、镶块寿命标准和使用次数
 */
@Data
public class ModuleArchivesEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 模框寿命标准
     */
    private Integer lifeStandard;
    /**
     * 模框使用次数
     */
    private Integer useNo;
    /**
     * 模框剩余次数
     */
    private Integer remainNo;
    /**
     * 镶块寿命标准
     */
    private Integer xiangkuaiLifeStandard;
    /**
     * 镶块使用次数
     */
    private Integer xiangkuaiUseNo;
    /**
     * 镶块剩余次数  NEWLY_ACCUMULATE_MT
     */
    private Integer xiangkuaiRemainNo;

    /**
     * 模具机型
     */
    private String productModel;


    /**
     * 模具号
     */
    private String moduleNo;
    /**
     * 模具类型
     */
    private String moduleType;
    /**
     * 模具编码
     */
    private String moduleCode;
    /**
     * $column.comments
     */
    private String id;
    /**
     * 修改时间
     */
    private Date updateDate;
    /**
     * 修改人
     */
    private String updateUser;
    /**
     * 创建时间
     */
    private Date createDate;
    /**
     * 创建人
     */
    private String createUser;
    /**
     * 删除标识
     */
    private Integer delFlag;
    /**
     * 模具机型
     */
    private String moduleModel;
    /**
     * 模具系列
     */
    private String moduleSeries;

    /**
     * 固资编号
     */
    private String firmCapitalNo;

    /**
     * 当前状态，取值自MoldState
     */
    private Integer currentState;
    /**
     * 启用时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startDate;

    /**
     * 现场使用码 2020.05.08新增
     * 为了防止系统自动生成的模具编号与现场编码不一致
     * 特别设置该字段用来表示
     */
    private String liveCode;

    /**
     * 底层编码，对应MES中自定义模具编码
     */
    private String lastCode;

    /**
     * 所属车间
     */
    private String subShop;

    private String subShopName;

    /**
     * 模具类别编码
     */
    private String moduleTypeCode;

    /**
     * 模具类别名称
     */
    private String moduleTypeName;

    /**
     * 购买时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date buyDate;

    /**
     * 量产时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date volumeProductionDate;

    /**
     * 报废时状况
     */
    private String scrapRemark;

    /**
     * 主要变更履历
     */
    private String majorChangeHistory;

    /**
     * 报废时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date scrapDate;

    /**
     * 初验收时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date initialAcceptDate;

    /**
     * 初验收时状况
     */
    private String initialAcceptRemark;

    /**
     * 终验收时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date finalAcceptDate;


    /**
     * 终验收时状况
     */
    private String finalAcceptRemark;

    /**
     * 最近一次维护时间：一般指特定模具最近一次维护开始的时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date newlyPmDate;

    /**
     * 自最近一次模具维护后累积的模次数
     * 即 newlyPmDate后累积的模次数
     */
    private Integer newlyAccumulateMt;

    /**
     * 模具厂家名称
     */
    private String moduleManufacturers;

    /**
     * 镶块厂家名称
     */
    private String xiangkuaiManufacturers;

    /**
     * 模具机型名称
     */
    private String productModelName;

    public Integer getLifeStandard() {
        return lifeStandard == null ? 0 : lifeStandard;
    }

    public Integer getUseNo() {
        return useNo == null ? 0 : useNo;
    }

    public Integer getRemainNo() {
        int remainNo = getLifeStandard() - getUseNo();
        if (remainNo < 0) {
            remainNo = 0;
        }
        return remainNo < 0 ? 0 : remainNo;
    }

    public Integer getXiangkuaiRemainNo() {
        int remainNo = getXiangkuaiLifeStandard() - getXiangkuaiUseNo();
        if (remainNo < 0) {
            remainNo = 0;
        }
        return remainNo < 0 ? 0 : remainNo;
    }

    /**
     * 维护或维修工单编号
     * 只在查询哪些模具已维修会维护过时有用
     */
    public String ticketNo;

    /**
     * 维护或维修工单ID
     * 只在查询哪些模具已维修会维护过时有用
     */
    public String ticketId;

    /**
     * 模具ID
     */
    private String moldId;

}
